tools/examples/block better use of losetup -r
authorKeir Fraser <keir.fraser@citrix.com>
Wed, 19 Dec 2007 15:05:15 +0000 (15:05 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Wed, 19 Dec 2007 15:05:15 +0000 (15:05 +0000)
Use losetup -r when the vbd is specified to be readonly, but only if
-r is supported (rather than always creating a writeable losetup
mapping if possible).

This was inspired by (but not derived from) a diff from the Fedora 8
patchset which uses -r iff the vbd is specified as readonly.  We need
to be cleverer upstream because not all systems have losetup -r.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
tools/examples/block

index cd7bd78107133d1cdd8962578e96ed4254f96ca7..f946784f033211f9eab917a03018beefdad52de2 100644 (file)
@@ -327,10 +327,13 @@ mount it read-write in a guest domain."
           fatal 'Failed to find an unused loop device'
         fi
 
-        status=$(losetup "$loopdev" "$file" || echo "failed")
-        if [ -n "$status" ]; then
-          do_or_die losetup -r "$loopdev" "$file"
+        if LANG=C losetup -h 2>&1 | grep read-only >/dev/null
+        then
+          roflag="-$mode"; roflag="${roflag#-w}"
+        else
+          roflag=''
         fi
+        do_or_die losetup $roflag "$loopdev" "$file"
         xenstore_write "$XENBUS_PATH/node" "$loopdev"
         write_dev "$loopdev"
         release_lock "block"